package com.seata.stock.errHandler;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/****************************************************
 * 通过 ControllerAdvice 统一处理异常
 *
 * ControllerAdvice 处理异常的顺序：粒度越小越先处理，若controller包中的异常没有匹配到 @ExceptionHandler 指定
 *                                                        的异常，则匹配最大粒度的异常
 *
 * @author lbf
 * @date 2025/8/4 9:46
 ****************************************************/
//处理 cotroller 中抛出的异常
@RestControllerAdvice(basePackages = {"com.seata.stock.controller"})
public class ExceptionControllerAdviceHandler {

    /**
     * 处理 RuntimeException 异常，并把处理后的异常信息返回给前台
     *
     * 测试：seata 分布式事务应用中，Order 调用 Stock，当使用 ControllerAdvice 处理了Stock的异常，异常没有抛出去时，事务不会回滚
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = RuntimeException.class)
    public String RuntimeExceptionHandler(RuntimeException e){

        System.out.println(" ExceptionControllerAdviceHandler：减库存失败~~~！"+e.getMessage());

        return "500";
    }

    @ExceptionHandler(value = Throwable.class)
    public String exception(Throwable e){

        System.out.println(" 处理最大粒度的异常~~~~~~");

        return "200";
    }
}
